Revert "file chooser: Stop using gtk_window_get_position"
authorTimm Bäder <mail@baedert.org>
Fri, 19 Jul 2019 07:47:16 +0000 (09:47 +0200)
committerTimm Bäder <mail@baedert.org>
Fri, 19 Jul 2019 16:14:49 +0000 (18:14 +0200)
This reverts commit 2ed533c3e1f0fe776fb24cc370447a0c63e49f24.

This also made the filechooser dialog not save the window size anymore,
which does not depend on the gtk_window_get_position() removal.

gtk/gtkfilechooserdialog.c
gtk/gtkfilechooserprivate.h
gtk/gtkfilechooserwidget.c

index 85a182f8a8d1e275b9c8170f866778b58211f880..40e19c8a872e6afc92792ca30126335d25ff8b60 100644 (file)
@@ -577,9 +577,39 @@ gtk_file_chooser_dialog_map (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_file_chooser_dialog_parent_class)->map (widget);
 }
 
+static void
+save_dialog_geometry (GtkFileChooserDialog *dialog)
+{
+  GtkWindow *window;
+  GSettings *settings;
+  int old_x, old_y, old_width, old_height;
+  int x, y, width, height;
+
+  settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (dialog));
+
+  window = GTK_WINDOW (dialog);
+
+  gtk_window_get_position (window, &x, &y);
+  gtk_window_get_size (window, &width, &height);
+
+  g_settings_get (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", &old_x, &old_y);
+  if (old_x != x || old_y != y)
+    g_settings_set (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", x, y);
+
+  g_settings_get (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", &old_width, &old_height);
+  if (old_width != width || old_height != height)
+    g_settings_set (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", width, height);
+
+  g_settings_apply (settings);
+}
+
 static void
 gtk_file_chooser_dialog_unmap (GtkWidget *widget)
 {
+  GtkFileChooserDialog *dialog = GTK_FILE_CHOOSER_DIALOG (widget);
+
+  save_dialog_geometry (dialog);
+
   GTK_WIDGET_CLASS (gtk_file_chooser_dialog_parent_class)->unmap (widget);
 }
 
@@ -593,6 +623,8 @@ gtk_file_chooser_dialog_size_allocate (GtkWidget *widget,
                                                                           width,
                                                                           height,
                                                                           baseline);
+  if (gtk_widget_is_drawable (widget))
+    save_dialog_geometry (GTK_FILE_CHOOSER_DIALOG (widget));
 }
 
 /* We do a signal connection here rather than overriding the method in
index 6379e0ab60f9cea1b4297271b832cf1c2e8aba65..a0a622c1116628500948f54fbbf412a16a90001d 100644 (file)
@@ -41,6 +41,7 @@ G_BEGIN_DECLS
 #define SETTINGS_KEY_SHOW_TYPE_COLUMN       "show-type-column"
 #define SETTINGS_KEY_SORT_COLUMN            "sort-column"
 #define SETTINGS_KEY_SORT_ORDER             "sort-order"
+#define SETTINGS_KEY_WINDOW_POSITION        "window-position"
 #define SETTINGS_KEY_WINDOW_SIZE            "window-size"
 #define SETTINGS_KEY_SIDEBAR_WIDTH          "sidebar-width"
 #define SETTINGS_KEY_STARTUP_MODE           "startup-mode"
index 0a37e2834d084bd7d3b4d015f358c5d56fcc24ba..59fb17604085fd851acba2c1accd443eef1ecc10 100644 (file)
@@ -6177,14 +6177,15 @@ gtk_file_chooser_widget_get_default_size (GtkFileChooserEmbed *chooser_embed,
   GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser_embed);
   GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
   GtkRequisition req;
-  int width, height;
+  int x, y, width, height;
   GSettings *settings;
 
   settings = _gtk_file_chooser_get_settings_for_widget (GTK_WIDGET (impl));
 
+  g_settings_get (settings, SETTINGS_KEY_WINDOW_POSITION, "(ii)", &x, &y);
   g_settings_get (settings, SETTINGS_KEY_WINDOW_SIZE, "(ii)", &width, &height);
 
-  if (width > 0 && height > 0)
+  if (x >= 0 && y >= 0 && width > 0 && height > 0)
     {
       *default_width = width;
       *default_height = height;